package org.junit.internal.requests; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; import org.junit.internal.runners.CompositeRunner; import org.junit.internal.runners.ErrorReportingRunner; import org.junit.internal.runners.InitializationError; import org.junit.runner.Description; import org.junit.runner.Request; import org.junit.runner.Runner; public class ErrorReportingRequest extends Request { private final Class<?> fClass; private final Throwable fCause; public ErrorReportingRequest(Class<?> klass, Throwable cause) { fClass= klass; fCause= cause; } @Override public Runner getRunner() { List<Throwable> goofs= getCauses(fCause); CompositeRunner runner= new CompositeRunner(fClass.getName()); for (int i= 0; i < goofs.size(); i++) { final Description description= Description.createTestDescription(fClass, "initializationError" + i); final Throwable throwable= goofs.get(i); runner.add(new ErrorReportingRunner(description, throwable)); } return runner; } private List<Throwable> getCauses(Throwable cause) { if (cause instanceof InvocationTargetException) return getCauses(cause.getCause()); if (cause instanceof InitializationError) return ((InitializationError) cause).getCauses(); return Arrays.asList(cause); } }